package comparisons

import (
	"jvm/nzpJvm/instructions/base"
	"jvm/nzpJvm/runtime_area"
)

// 弹出栈顶两个ref变量并且进行比较。用于比较两个引用是否指向同一个对象
type IF_ACMPEQ struct{ base.BranchInstruction }
type IF_ACMPNE struct{ base.BranchInstruction }

func (self *IF_ACMPEQ) Execute(frame *runtime_area.Frame) {
	stack := frame.OperandStack()
	popRef1 := stack.PopRef()
	popRef2 := stack.PopRef()
	// 相等则跳转
	if popRef2 == popRef1 {
		base.Branch(frame, self.Offset)
	}
}
func (self *IF_ACMPNE) Execute(frame *runtime_area.Frame) {
	stack := frame.OperandStack()
	popRef1 := stack.PopRef()
	popRef2 := stack.PopRef()
	// 不相等则跳转
	if popRef2 != popRef1 {
		base.Branch(frame, self.Offset)
	}
}
